package com.colin.project.util;

import cn.hutool.core.io.IoUtil;
import com.colin.project.exception.impl.NullFileException;

import java.io.*;

/**
 * 文件工具类
 */
public class FileUtil {

    /**
     * 读写文件操作
     * @param fileResourceLocationPrefix
     * @param username
     * @param originalFilename
     * @param timestamp
     * @param inputStream
     * @return 文件拼接时间戳后的最终名称
     * @throws IOException
     * @throws NullFileException
     */
    public static String readWriteFile(String fileResourceLocationPrefix, String username, String originalFilename, long timestamp, InputStream inputStream) throws IOException, NullFileException {
        FileOutputStream fileOutputStream = null;
        String finalFileName = null;
        try {
            File file = new File(fileResourceLocationPrefix + username);
            if (!file.exists() && !file.isDirectory()) {
                file.mkdir();
            }
            //获取文件拼接时间戳后的最终名称
            finalFileName = FileUtil.getTimestampFileName(originalFilename, timestamp);
            //D:/headImg/ice + "/" + finalFileName
            fileOutputStream = new FileOutputStream(fileResourceLocationPrefix + username + "/" + finalFileName);
            //利用hutool工具包的IoUtil 快速的做文件的IO操作 将文件写入本地磁盘
            IoUtil.copy(inputStream, fileOutputStream);
            return finalFileName;
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (fileOutputStream != null) {
                fileOutputStream.close();
            }
        }
    }

    /**
     * 获取文件后缀名
     * @param originalFileName
     * @return 文件后缀名
     * @throws NullFileException 空文件异常
     */
    public static String getSuffixName(String originalFileName) throws NullFileException {
        if (originalFileName == null) {
            throw new NullFileException("当前用户上传的文件是 null");
        }
        //对文件名称做解析  test.jpg
        //获取文件名称中最后一个.的索引
        int tempIndex = originalFileName.lastIndexOf(".");
        //截取字符串.jpg
        return originalFileName.substring(tempIndex);
    }

    /**
     * 获取拼接时间戳后的文件最终名称
     * @param originalFileName 用户上传时的原始名称
     * @return 拼接时间戳后的文件最终名称
     */
    public static String getTimestampFileName(String originalFileName, long timestamp) throws NullFileException {
        if (originalFileName == null) {
            throw new NullFileException("当前用户上传的文件是 null");
        }

        String suffixName = getSuffixName(originalFileName);
        //test-173218379812.jpg
        return originalFileName.substring(0, originalFileName.lastIndexOf(".")) + "-" + timestamp + suffixName;
    }

}
